package com.example.librarymanagementsystembackend.borrowingmanagement.mapper;

import com.example.librarymanagementsystembackend.borrowingmanagement.entity.BorrowBooksDTO;
import com.example.librarymanagementsystembackend.borrowingmanagement.entity.BorrowRecord;
import com.example.librarymanagementsystembackend.borrowingmanagement.entity.CategoryBorrowNumber;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 借阅记录 Mapper 接口
 */
@Mapper
public interface BorrowingRecordMapper {

    /**
     * 根据用户ID查询借阅记录
     *
     * @param userId 用户ID
     * @return 用户的借阅记录列表
     */
    List<BorrowRecord> selectBorrowRecordsByUserId(Integer userId);

    /**
     * 统计各图书类别的借阅数量
     * @return 图书类别与借阅数量的统计列表
     */
    List<CategoryBorrowNumber> selectCategoryBorrowNumbers();

    /**
     * 查询用户未归还的借阅记录
     * @param userId 用户ID
     * @param bookId 图书ID
     * @return 未归还的借阅记录
     */
    BorrowRecord selectUnreturnedRecord(@Param("userId") Integer userId,
                                        @Param("bookId") Integer bookId);

//    /**
//     * 更新借阅记录
//     * @param record 借阅记录
//     * @return 更新行数
//     */
//    int updateBorrowRecord(BorrowRecord record);

    /**
     * 根据借阅ID获取借阅记录
     */
    BorrowRecord getBorrowRecordById(@Param("borrowId") Integer borrowId);

    /**
     * 更新借阅记录
     */
    int updateBorrowRecord(@Param("record") BorrowRecord record);

    /**
     * 添加用户借阅记录 通过 ID
     * @param borrowBooksDTO
     */
    int addBorrowingRecordByUserId(BorrowBooksDTO borrowBooksDTO);

    /**
     * 获取用户借阅记录通过 ID
     */
    @Select("SELECT * FROM borrowrecords WHERE userId = #{userId}")
    List<BorrowRecord> getBorrowRecordsByUserId(@Param("userId") int userId);

    /**
     * 获取所有用户借阅记录
     */
    @Select("SELECT id, userId, bookId, borrowTime, returnTime, overdueDays, overdueFine FROM borrowrecords")
    List<BorrowRecord> getAllBorrowingRecords();
}